#pragma once

#include <gofcl_gpio_bop.h>

// BOP寄存器的定义
typedef struct {
	gpio_pins_s high_pins;
	gpio_pins_s low_pins;
} gpio_bop_expl_s;

_Static_assert(sizeof(gpio_bop_s) == 4,
	       "Struct gpio_bop_expl_s defined error!");

static inline void gpio_high_low(gpio_qe gpio_q, gpio_bop_expl_s bop) {
	union {
		gpio_bop_expl_s e;
		gpio_bop_s r;
	} er = {
		.e = bop,
	};
	gpio_wreg_bop_s(gpio_q, er.r);
}

// 将给定GPIO的若干位输出1（列于低16位），若干位输出0（列于高16位）。
// 对于输出引脚是输出高或低电平，对于上下拉输入引脚是设置上拉或下拉。
static inline void gpio_output_pull_high_low(gpio_qe gpio_q,
					     gpio_bop_expl_s bop) {
	gpio_high_low(gpio_q, bop);
}
